package com.zy.explore.strategy.interfaces.facade.v1;

import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.zy.explore.strategy.interfaces.assembler.VipStrategyAssembler;
import com.zy.explore.strategy.interfaces.frm.VipCostFrm;
import com.zy.explore.strategy.interfaces.vo.ResultVO;
import com.zy.explore.strategy.interfaces.vo.VipRealCostVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;
import javax.validation.Valid;

/**
 * description 会员策略Facade (最low的使用if-else解决)
 *
 * 一个电商系统，当用户消费满1000 金额，可以根据用户VIP等级，享受打折优惠。
 * 根据用户VIP等级，计算出用户最终的费用。
 *
 * 1)普通会员 打98折
 *
 * 2)白银会员 优惠50元 再打9折
 *
 * 3)黄金会员 8折
 *
 * 4)白金会员 优惠50元，再打7折
 *
 * @author 🇨🇳中国印🇨🇳
 * @date 2021年07月03日 00:56
 */
@Api(tags = {"会员计费:版本1"})
@RestController
@RequestMapping("/v1/strategy")
public class VipStrategyFacade {

    @Resource
    private VipStrategyAssembler vipStrategyAssembler;

    @ApiOperationSupport(order = 10)
    @ApiOperation("计算费用")
    @PostMapping("/calcCosts")
    public ResultVO<VipRealCostVO> calcCosts(@RequestBody @Valid VipCostFrm frm) {
        return ResultVO.getSuccess(vipStrategyAssembler.calcCosts(frm));
    }


}
